#include<bits/stdc++.h>
#define int long long
using namespace std;
const int p=1e9+7;
static int f[52],d[52];
int n,c[10],r; string s;
inline void chadd(int &x,int y){
  if((x+=y)>=p)x-=p;
}
inline int qpow(int a,int b){
  int r=1;
  while(b){
    if(b&1)(r*=a)%=p;
    (a*=a)%=p,b>>=1;
  }
  return r;
}
inline int bf(){
  int x=0,d=0;
  for(int i=0;i<10;i++)
    if(c[i]>=x)x=c[i],d=i;
  return d;
}
inline int get(vector<int> &c,int s){
  if(s<0)return 0;
  vector<int> f(s+1); f[0]=1;
  for(int i:c)if(i){
    vector<int> g(s+1);
    for(int j=0;j<=s;j++)
      if(f[j])for(int k=0;k<=i&&j+k<=s;k++)
        chadd(g[j+k],f[j]*d[k]%p);
    f=g;
  }
  return f[s];
}
void dfs(int x,bool l,bool b){
  if(x==n)return chadd(r,l?0:bf());
  if(!b){
    if(l){
      for(int i=0;i<10;i++){
        if(i)c[i]++;
        dfs(x+1,!i,false);
        if(i)c[i]--;
      }
    }
    else{
      for(int i=1;i<10;i++)
        for(int j=max(c[i],1ll);j<=c[i]+n-x;j++){
          vector<int> w;
          for(int k=0;k<i;k++)
            w.emplace_back(j-c[k]);
          for(int k=i+1;k<10;k++)
            w.emplace_back(j-c[k]-1);
          bool b=true;
          for(int i:w)if(i<0){b=false; break;}
          if(!b)continue;
          chadd(r,f[n-x]*d[j-c[i]]%p*get(w,n-x-j+c[i])%p*i%p);
        }
    }
    return;
  }
  for(int i=s[x]-48;~i;i--){
    if(i||!l)c[i]++;
    dfs(x+1,l&&!i,i==s[x]-48);
    if(i||!l)c[i]--;
  }
}
main(){
  freopen("give.in","r",stdin);
  freopen("give.out","w",stdout);
  ios::sync_with_stdio(false);
  cin.tie(0); cout.tie(0);
  for(int i=f[0]=d[0]=1;i<=51;i++)
    d[i]=qpow(f[i]=f[i-1]*i%p,p-2);
  int t; cin>>t;
  while(t--){
    cin>>s,n=s.length(),r=0;
    memset(c,0,sizeof(c));
    dfs(0,true,true),cout<<r<<'\n';
  }
  return 0;
}